// 3. 无重复字符的最长子串
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int n=s.length(),ans=0,left=0;
        vector<int> cnt(128, 0); 
        for(int right=0;right<n;right++){
            char c=s[right];
            cnt[c]++;
            while(cnt[c]>1){
                cnt[s[left]]--;
                left++;
            }
            ans=max(ans,right-left+1);
        }
        return ans;
    }
};

// 438. 找到字符串中所有字母异位词
class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
            int sLen=s.size(),pLen=p.size();

            if(sLen<pLen){
                return vector<int>();
            }

            vector<int>ans;
            vector<int>sCount(26);
            vector<int>pCount(26);
            for(int i=0;i<pLen;i++){
                ++sCount[s[i]-'a'];
                ++pCount[p[i]-'a'];
            }
            if(sCount==pCount){
                ans.emplace_back(0);
            }
            for(int i=0;i<sLen-pLen;i++){
                --sCount[s[i]-'a'];
                ++sCount[s[i+pLen]-'a'];

                if(sCount==pCount){
                    ans.emplace_back(i+1);
                }
            }
            return ans;
    }
};